#第一步，import相关模块
import tensorflow as tf #导入所需的各种库和包

#第二步加载数据集
fashinon_mnist = tf.keras.datasets.fashion_mnist
(x_train,y_train),(x_test,y_test) = fashinon_mnist.load_data()#加载数据集(训练集和数据集)
x_train,x_test= x_train / 255.0,x_test/255.0

#第三步逐层搭建网络结构
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
									tf.keras.layers.Dense(128,activation = 'relu'),
									tf.keras.layers.Dense(64,activation = 'tanh'),
									tf.keras.layers.Dense(32,activation = 'sigmoid'),
									tf.keras.layers.Dense(10,activation = 'softmax')])

#第四步 在model.compile()中配置训练方法，选择训练时使用的优化器，损失函数和最终评价指标
#model.compile(optimizer=优化器,loss = 损失函数,metrics = ['准确率'])
# model.compile(optimizer='adam',
# 			loss ='sparse_categorical_crossentropy' ,
# 			metrics = ['categorical_accuracy'])
model.compile(optimizer='adam',#优化器
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),#flase时转换为概率的形式，true时没有转化为概率分布，直接输出
              metrics=['sparse_categorical_accuracy'])

#第五步，在model.fit()中执行训练过程，告知训练集和测试机的输入值和标签，每个batch的大小（batchsize）和数据集的迭代次数(epoch)
# model. fit(
# 			训练集的输入特征,
# 			训练集的标签,
# 			batch_size, 
# 			epochs,
# 			validation_data = ( ( 测试集的输入特征，测试集的标签) ) ,
# 			validataion_split =  从测试集划分多少比例给训练集,#可选，如果本身有
# 			validation_freq =  测试的epoch间隔次数
# 		  ) 
# model.fit(x_train,y_train,batch_size = 32,epochs = 5,validation_data = (x_test,y_test),validation_freq = 1)
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)

#第六步，使用model.summary()打印网络结构，统计参数数目
model.summary()